2.7 CDN 与流媒体

流媒体已经成为了互联网的一大杀手级应用。

我们来考虑一下视频是如何存储的。一个最简单的想法是,视频就是一系列快速播放的图片。而图片是由大量 <像素位置, 像素颜色> 对组成的文件。不过由于临近的帧可能会有很多像素点没有变化,因此为了压缩占用空间可以对视频进行编码。常见的视频编码方式分为 恒定比特率编码(Constant Byte Rate,CBR)可变比特率编码(Variable Byte Rate,VBR) 两种。一般而言,视频比特率越高,能承载的像素信息越多,视频看起来越清晰。

一种简单的在网络上播放多媒体的方式是下载后播放,即客户端将整个视频文件下载到本地后再进行播放。显然由于视频文件体积很大,下载所需时间很长,难以接受。现在普遍的传输视频的方式是 流化播放。字如其名,将视频文件的传输类比为一个流,客户端与服务器之间建立起连接后客户端请求视频的一部分片段存放在缓存中,当累积的视频内容超过一定阈值后开始播放,啊同时持续向客户端请求后续的视频片段。因此在流式传输下,客户端可以同时请求并播放视频,只请求需要的视频片段。

常见的流式传输方式分为 UDP 流化、HTTP 流化与 基于 HTTP 的动态适应性流(Dynamic Adaptive Streaming over HTTP,DASH) 三种。

HTTP 流化即为基于 HTTP 协议的流式传输。服务器将视频切割成片,每一片都有一个 URL 标识。客户端依据自身需要,对想要获取的视频片段依次发送 HTTP 请求。服务器收到请求后,依据协议规定尽快的将片段发送给客户端。客户端维护一个应用层缓冲区,当缓冲区内积累的内容达到阈值后,开始播放视频。如下图所示:
Pasted image 20250319110225.png

然而,上图是一个理想化的,具体而言是 假定客户端与服务器之间的吞吐量与传输延迟固定 的。然而在实际的分组交换网络中,上述理想情况很难出现。这就是流式传输在网络上传输时面临的挑战:

我们来逐个考虑上述的问题如何解决:

在有了上述解决方案之后,我们来考察客户端在播放一个视频时发生的事情:

在实际中,内容提供商一般通过 DNS 截获用户向中心服务器发送的内容请求并将用户重定向到选定的为其提供服务的 CDN 服务器上。即,某个指向视频文件的链接实际上可能会被权威 DNS 服务器解析为指向 CDN 权威服务器的主机地址。CDN 有多种集群选择策略用于确定如何为某个用户提供哪台 CDN 服务器。常见的两种策略为 按地理位置CDN 服务器主动向本地 DNS 服务器发送请求测定连接速率。二者各有利弊,前者难以处理用户终端与其对应的 LDNS 相距甚远或地理位置相距较近的服务器跨越的网络链路更长的情况;后者则面对不响应探测报文的 LDNS 束手无策。